﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using GS1.Library;
using ServirMovil.Clases.Negocio;
using ServirMovil.Clases.Movil;
using ServirMovil.ServicioWS;
using ServirMovil.Clases.Datos;

namespace ServirMovil
{
    public partial class frmMenuInventario : Form
    {
        #region --- Variables ---
        private Inventario inventario = null;
        #endregion

        #region --- Constructor ---
        public frmMenuInventario()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos Formulario ---
        private void frmMenuInventario_Load(object sender, EventArgs e)
        {
            cargarFormulario();
        }

        private void mnuSalir_Click(object sender, EventArgs e)
        {
            salir();
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            cerrar();
        }

        private void btnIniciar_Click(object sender, EventArgs e)
        {
            iniciar();
        }

        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            registrar();
        }
        #endregion

        #region --- Metodos Propios ---
        private void cargarFormulario()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                MetodosAplicacion.configuraFormulario(this);

                // Cargar inventario de base de datos movil
                this.inventario = cargarInventario();

                // Validar si ya tiene un inventario establecer el usuario y la sede
                if (this.inventario != null)
                {
                    // Estableciendo sede y usuario al inventario activo
                    this.inventario.sede = ParametrosAplicacion.SEDE_ACTUAL;
                    this.inventario.usuario = ParametrosAplicacion.USUARIO_ACTUAL;
                }
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.lblTitulo.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void iniciar()
        {
            try
            {
                if (this.inventario != null)
                {
                    Util.ShowMessageboxInfo("Ya se tiene iniciado un inventario", this.lblTitulo.Text);
                    return;
                }

                Cursor.Current = Cursors.WaitCursor;

                // Estableciendo sede y usuario al inventario activo
                this.inventario = new Inventario();
                this.inventario.sede = ParametrosAplicacion.SEDE_ACTUAL;
                this.inventario.usuario = ParametrosAplicacion.USUARIO_ACTUAL;

                using (Interfase interfase = new Interfase())
                {
                    this.inventario = interfase.iniciarInventario(this.inventario);
                }

                if (this.inventario != null)
                {
                    // Registra inventario en base de datos movil
                    new InventarioDA().iniciarInventario(this.inventario);

                    Util.ShowMessageboxInfo("Inventario Iniciado Nro:" + this.inventario.codInventario);
                }
            }
            catch (Exception ex)
            {
                // Liberar variable de inventario
                this.inventario = null;

                Util.MensajeError(ex, this.lblTitulo.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void cerrar()
        {
            bool resultado = false;
            try
            {
                if (this.inventario == null)
                {
                    Util.ShowMessageboxInfo("Debes tener iniciado un inventario para poder cerrarlo", this.lblTitulo.Text);
                    return;
                }

                Cursor.Current = Cursors.WaitCursor;

                // Estableciendo sede y usuario al inventario activo
                this.inventario.sede = ParametrosAplicacion.SEDE_ACTUAL;
                this.inventario.usuario = ParametrosAplicacion.USUARIO_ACTUAL;

                // Cerrando inventario en servidor
                using (Interfase interfase = new Interfase())
                {
                    resultado = interfase.cerrarInventario(inventario);
                }

                if (resultado)
                {
                    // Cerrar o registrar inventario en base de datos movil
                    new InventarioDA().cerrarInventario(inventario);

                    Util.ShowMessageboxInfo("Inventario Cerrado Correctamente", this.lblTitulo.Text);

                    // Liberando variable de inventario
                    this.inventario = null;
                }
                else
                {
                    Util.ShowMessageboxExclamacion("No se pudo cerrar el Inventario", this.lblTitulo.Text);
                }
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.lblTitulo.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void registrar()
        {
            if (this.inventario == null)
            {
                Util.ShowMessageboxInfo("Debes tener iniciado un inventario para poder registrar", this.lblTitulo.Text);
                return;
            }

            using (frmInventarioRegistrar frmInventarioRegistrar = new frmInventarioRegistrar())
            {
                frmInventarioRegistrar.inventario = this.inventario;
                frmInventarioRegistrar.ShowDialog();
            }
        }

        private Inventario cargarInventario()
        {
            Inventario inventarioResultado = null;

            try
            {
                Cursor.Current = Cursors.WaitCursor;

                // Instanciando inventario
                this.inventario = new Inventario();

                // Estableciendo sede y usuario al inventario activo
                this.inventario.sede = ParametrosAplicacion.SEDE_ACTUAL;
                this.inventario.usuario = ParametrosAplicacion.USUARIO_ACTUAL;

                // Obtener inventario actual
                inventarioResultado = new InventarioDA().obtenerInventario(this.inventario);
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.lblTitulo.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

            return inventarioResultado;
        }

        private void salir()
        {
            this.Close();
        }
        #endregion
    }
}